package Test.StirngTest;

/**
 * @Author kirito
 * @Date 2023/11/10 13:56
 * @PackageName:Test.Test02
 * @ClassName: StringTest
 * @Description:
 * @Version 1.0
 */
public class StringTest {
    public static void main(String[] args) {
        /**
         * ① String s = new String("1")
         * 创建了两个对象
         * 		堆空间中一个new对象
         * 		字符串常量池中一个字符串常量"1"（注意：此时字符串常量池中已有"1"）
         * ② s.intern()由于字符串常量池中已存在"1"
         *
         * s  指向的是堆空间中的对象地址
         * s2 指向的是堆空间中常量池中"1"的地址
         * 所以不相等
         */
        String s = new String("1");
        s.intern();
        String s2 = "1";
        System.out.println(s==s2); // jdk1.6 false jdk7/8 false


        String s3 = new String("1") + new String("1");
        s3.intern();
        String s4 = "11";
        System.out.println(s3==s4); //jdk1.6 false jdk7/8 true
        /*
         * ① String s3 = new String("1") + new String("1")
         * 等价于new String（"11"），但是，常量池中并不生成字符串"11"；
         *
         * ② s3.intern()
         * 由于此时常量池中并无"11"，所以把s3中记录的对象的地址存入常量池
         * 所以s3 和 s4 指向的都是一个地址
         */

        String S = new String("Test");
        System.out.println(S);
        String S2 = S;
        S = "qwe";
        System.out.println(S);
        System.out.println(S2);

    }

}
